// 给定一个数组nums，nums是升序数组经过旋转得到的，但是旋转次数未知，数组中不存在重复元素，要求找出数组中的最小元素,旋转操作：将数组整体右移若干位置
// 思路：二分查找，数组经过旋转后有两种情况：1.升序序列，2.两端升序的序列，left和right分别指向数组的首尾，计算指针中间值mid
// 如果nums[mid] > nums[right],最小值一定在mid右侧，将left移到mid+1位置，查找右侧区间
// 如果nums[mid] <= nums[right],最小值一定在mid左侧，将right移动到mid位置上，查找左侧区间

function findMin(nums) {
    let left = 0
    let right = nums.length - 1
    while (left < right) {
        let mid = Math.floor((right - left) / 2) + left
        if (nums[mid] > nums[right]) {
            left = mid + 1
        } else {
            right = mid
        }
    }
    return nums[left]
}

// 时间复杂度为Ologn
// 空间复杂度为O1

let arr = [3, 4, 5, 1, 2]
console.log(findMin(arr));